package com.atguigu.gmall.web.controller;

import com.atguigu.gmall.cart.vo.AddCartSuccessVo;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.feign.cart.CartFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @author lfy
 * @Description 购物车业务处理
 * @create 2022-10-17 9:16
 */
@Slf4j
@Controller
public class CartController {



    @Autowired
    CartFeignClient cartFeignClient;
    //容器 -- 只放不删，map可能无限膨胀，导致 oom（应用就会假死）。
//    public  static final Map<Thread,HttpServletRequest>  requestMap =
//            new ConcurrentHashMap<>();

    //同一个线程共享数据用。 上面等同于 写 ThreadLocal
//    public static final ThreadLocal<HttpServletRequest> threadLocal =
//            new ThreadLocal<HttpServletRequest>();
    /**
     * 把商品添加到购物车
     * @return
     */
    @GetMapping("/addCart.html")
    public String addCart(@RequestParam("skuId") Long skuId,
                          @RequestParam("skuNum") Integer skuNum,
//                          HttpServletRequest request,
                          Model model){
        //利用线程绑定机制-共享老请求（同一个请求从开始处理到结束都是一个线程）
//        requestMap.put(Thread.currentThread(),request);
//        threadLocal.set(request);
        //Tomcat每次接到一个请求，都会分配一个线程来处理
        //把商品添加到购物车; 远程调用CART服务把商品加到购物车
        Result<AddCartSuccessVo> result = cartFeignClient
                .addToCart(skuId, skuNum);

        //请求进来（老请求绑定好）-----dispatcherServlet----controller---service----dao --- 请求结束
        //线程绑定
        //SpringMVC 只要开始处理请求，就自动会把当前请求绑定共享到当前线程


        //拿到当时请求信息
        if (result.isOk()) {
            model.addAttribute("skuInfo",result.getData().getSkuInfo());
            model.addAttribute("skuNum",result.getData().getSkuNum());
            return "cart/addCart";
        }else {
            log.info("加入购物车失败：{}",result);
            model.addAttribute("msg",result.getMessage());
            return "cart/error";
        }

//        requestMap.remove(Thread.currentThread());
//        threadLocal.remove();

    }


    /**
     * 购物车商品列表页
     * @return
     */
    @GetMapping("/cart.html")
    public String cartList(){

        return "cart/index";
    }

    /**
     * 删除购物车中选中的商品
     *
     * redirect: 重定向到一个位置
     * forward: 转发到一个位置
     */
    @GetMapping("/cart/deleteChecked")
    public String deleteChecked(){
        //return "cart/index";

        //远程调用之前有拦截器，网关传来的用户信息，透传给远程调用的服务
        cartFeignClient.deleteChecked();
        return "redirect:http://cart.gmall.com/cart.html";
    }
}
